2017-11-11 207 views
0
使用mod_rewrite

我有以下网址:PHP - 在Apache中

http://example.com/pages/page.php?company_name=Name

我想实现的是有这样一个URL:

http://example.com/pages/Name

我已经尝试了不同的规则但不起作用:

RewriteRule ^pages/([A-Za-z0-9-]+)/?$ /pages/page.php?company_name=$1 [NC] or 

RewriteRule ^pages/([^/]*)\.php$ /pages/page.php?company_name=$1 [L] 

它不起作用。它给了我一个“未找到”页面。我该如何正确使用mod_rewrite?

回答

0

尝试了这一点:

RewriteRule ^pages/([0-9a-zA-Z\-_]*)(/|)$ /pages/page.php?company_name=$1 [QSA,L] 

这会关心或不关心,如果该URL的末尾有斜杠:

http://example.com/pages/Name 
http://example.com/pages/Name/ 

,也将包括任何额外AGRS(QSA)如果页面调用因为它:

http://example.com/pages/Name/?more=stuff 

这应该工作,如果你的Apache有mod_rewrite和PHP存在你已经显示。

UPDATE

如果你有一个不同的URL,它需要一个不同的PHP,例如 '蓝页':

http://example.com/bluepages/Name 

那么这会工作为:

RewriteRule ^bluepages/([0-9a-zA-Z\-_]*)(/|)$ /bluepages/somescript.php?some_var=$1 [QSA,L] 

如果您有多个你想要控制的这个,你可以在你的htaccess中为每一个创建多个RewriteRules。但是,如果你只是想通配符话,那么这将做一个盲目的包罗万象(并导致大量的错误报告在Apache日志):

RewriteRule ^([0-9a-zA-Z]*)/([0-9a-zA-Z\-_]*)(/|)$ /$1/page.php?some_var=$2 [QSA,L] 

你要么必须是具体的,或者只是改变了一切。有很多方法可以配合使用,而且这取决于你的意图。

+0

我试过上面的选项,但它仍然不起作用,仍然给我“未找到 在这台服务器上没有找到请求的URL /bluepages/Name.php我想知道文件夹结构的问题?因为我有root/pages文件夹,我的.htaccess文件和剩余的php文件位于这里。谢谢 –

+0

以上内容适用于你提供的例子,如果你所做的不是你提供的内容,那么我的答案将不起作用。提及现在的蓝图和根/页面......所有这些东西都会起作用,应该已经添加到您的原始问题中 – IncredibleHat

+0

感谢您的更新,它现在可以工作了。根据您提供的内容,我会尝试一些选项/场景并查看它给出的结果。再次感谢! –