两个RewriteRule不能一起工作

时间:2015-11-03 22:05:14

标签: apache .htaccess mod-rewrite

我需要的结果是:

http://mywebsite.co/company.php?title=company-name

应该看起来像

http://mywebsite.co/company-name

以同样的方式:

mywebsite.co/project.php?compname=compan-name&prjt=project-name

应该看起来像

mywebsite.co/company-name/project-name

这是我的代码:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /company.php
RewriteCond %{QUERY_STRING} ^title=([A-Za-z0-9-]*)$
RewriteRule ^company\.php$ http://mywebsite.co/%1? [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /project.php
RewriteCond %{QUERY_STRING} ^compname=([A-Za-z0-9-/]*)&prjt=([A-Za-z0-9-/]*)$ 
RewriteRule ^project\.php$ http://mywebsite.co/%1/%2? [L]

这两条规则是单独使用的IF。但如果在一个文件中一起使用,则只有一个规则(project.php)正在运行。第二个规则(company.php)需要的URL结构,但内容为空(站点布局,页眉和页脚即将到来)。

有任何帮助吗?

2 个答案:

答案 0 :(得分:2)

这应该可以解决问题。

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteCond %{THE_REQUEST} ^GET\ /company\.php\?title=(.+)
RewriteRule ^ %1? [R=301,L]

RewriteCond %{THE_REQUEST} ^GET\ /project\.php\?compname=(.+)&prjt=(.+)
RewriteRule ^ %1/%2? [R=301,L]

RewriteRule ^([^/]+)/([^/]+)/?$ project.php [L]
RewriteRule ^([^/]+)/?$ company.php [L]

让我知道它对你有用。

答案 1 :(得分:0)

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ company.php [L]
RewriteCond %{QUERY_STRING} ^title=([A-Za-z0-9-]*)$
RewriteRule ^company.php$ http://mywebsite.co/%1 [2]? [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /project.php
RewriteCond %{QUERY_STRING} ^compname=([A-Za-z0-9-/]*)&prjt=([A-Za-z0-9-/]*)$
RewriteRule ^project.php$ http://mywebsite.co/%1/%2 [3]? [L]'

我改变了我的代码。有效。 :)