English 中文(简体)
Mod Rewrite ignoring -d
原标题:

After a day or two, I am still fighting with Mod Rewrite. It seems that 60% of my development time is spent battling the server.

My current URL structure is such that all http://example.com/xyz and http://example.com/xyz/abc should be handled by index.php. The problem is I have a http://example.com/admin/ section, which is a real directory which I need to be accessible via HTTP request (it s the CMS directory)

When I try to browse to the CMS http://example.com/admin/, It changes my URL to http://example.com/admin/?n=admin and returns a 404. My index.php is receiving n=admin as it s argument.

What I cant understand is why these two conditions are being ignored:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !^admin(?:/)?$

And why I m getting that redirect to http://example.com/admin/?n=admin (Rather than just stopping at http://example.com/admin/.

Options +FollowSymlinks
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !^admin(?:/)?$

# allow access to certain subdirectories.
RewriteRule ^admin(?:/)?$ /admin/ [L,NC]

# redirect all old URLs to new pages (or 404 sitemap page if no analog?).
RewriteRule ^company/about(?:/)?$ /company [R=301,L,NC]

# catch any others and try to serve them right
RewriteRule ^/?(.+).html$ /$1 [R=301,L]

RewriteRule ^/?([0-9]+)(?:/)?$ /index.php?p=$1 [L]
RewriteRule ^/?([-a-zA-Z0-9_+]+)(?:/)?$ /index.php?n=$1 [L]
RewriteRule ^/?([-a-zA-Z0-9_+]+)/([-a-zA-Z0-9_+]+)(?:/)?$ /index.php?n=$2 [L]

Can anyone offer any ideas or point out any flaws in the .htaccess?

最佳回答

Each RewriteCond only applies the the next RewriteRule.

so only your first Rule has a condition.

Your options are to repeat the rules, or make then final and exiting (cannot remember flag for this off my head)

问题回答

Try this rule before your other rules:

RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

This will end the rewrite process if the requested path can be mapped to an existing directory. The same applies when using -f instead.





相关问题
Uncommon regular expressions [closed]

Recently I discovered two amazing regular expression features: ?: and ?!. I was curious of other neat regex features. So maybe you would like to share some tricky regular expressions.

regex to trap img tag, both versions

I need to remove image tags from text, so both versions of the tag: <img src="" ... ></img> <img src="" ... />

C++, Boost regex, replace value function of matched value?

Specifically, I have an array of strings called val, and want to replace all instances of "%{n}%" in the input with val[n]. More generally, I want the replace value to be a function of the match ...

PowerShell -match operator and multiple groups

I have the following log entry that I am processing in PowerShell I m trying to extract all the activity names and durations using the -match operator but I am only getting one match group back. I m ...

Is it possible to negate a regular expression search?

I m building a lexical analysis engine in c#. For the most part it is done and works quite well. One of the features of my lexer is that it allows any user to input their own regular expressions. This ...

regex for four-digit numbers (or "default")

I need a regex for four-digit numbers separated by comma ("default" can also be a value). Examples: 6755 3452,8767,9865,8766,3454 7678,9876 1234,9867,6876,9865 default Note: "default" ...

热门标签