Mod_rewrite无法以静默方式重定向

时间:2012-07-15 00:08:17

标签: php mod-rewrite

2天的挣扎和大约一磅的头发,我认为这是我要求一些帮助的时间。我最近将我的项目迁移到主子目录,以便结构如下:

-application/
   -index.php
   -signup/
      -index.php
      -signup_set.php
-css/
-js/

我一直在努力让mod_rewrite为我做我的工作,从所有网址中排除“application /”。这是我扎根的地方.htaccess:

RewriteEngine On 

#first round through, prepend 'application/' to request
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !^application

RewriteRule ^(.*)$ application/$1 [L]

#second round through, if the new url is not directory or file, append .php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ $1.php [L] 

我可能对正则表达式/ mod_rewrite有一个可怕的理解,但这实际上似乎部分有效。部分地。关于此的奇怪部分是当我路由到“漂亮的URL”(例如www / signup)时,顶部栏中的URL被物理地重写为包括“application /”(例如www / application / signup)。所以这种“沉默”的重写过程变得非常响亮......有什么建议吗?我意识到我可以更改我的根目录,但这需要重写引用css / js文件的代码。我比任何事都更好奇,只是尝试一下htaccess。任何帮助,将不胜感激!谢谢StackOverflow,你摇滚。

P.S。我在Windows 7上运行Apache并使用虚拟主机(如果有任何相关的话)

1 个答案:

答案 0 :(得分:2)

以下规则适用于我使用虚拟主机在Windows 7上运行Apache。我改变的只是第二个RewriteCond

RewriteEngine On

# Append trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(?:\.\w+|/)$
RewriteRule ^(.*)$ /$1/ [L]

# First round through, prepend 'application/' to request
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/application
RewriteRule ^(.*)$ application/$1 [L]

# Second round through, if the new url is not directory or file, append .php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\.\w+$
RewriteRule ^(.*)/$ $1.php [L]