1

首先,对不起我的英语不好。我想配置我的 .htaccess 来重写 URL。

example.com/company1.com

而是 example.com/sub=company1.com

我的 .htaccess 现在:

RewriteEngine On
RewriteRule ^([a-z_]+)/?$ index.php?sub=$1

我在stackoverflow中搜索。如果我将 (.*) 正则表达式用于所有字符或 ([az\.]+) 用于在域字符串 (company1.con) 中包含“点”字符,我的皮肤就坏了。我的临时解决方案是使用 ([a-z_]+) 和http://example.com/company1_com而不是 http://example.com/company1.com 这是不好的解决方案 :( 所以,请给我这个问题的正则表达式。谢谢。

4

3 回答 3

1

mod_rewrite中描述了 Apache 的重写。

对你来说,只要你忽略可能的 GET 参数或路径,它应该是

RewriteEngine On
RewriteRule ^/([^?/]+) /index.php?sub=$1 [L]

我猜它坏了,因为您在 index.php 之前缺少“/”,GET 中有更长的路径(example.com/company1.com/css/style.css)或者您提交表单(example.com /company1.com?a=foo&b=bar )。

于 2012-08-03T11:25:45.950 回答
0

试试这个

RewriteEngine On
RewriteRule ^(.*)$ index.php?sub=$1
于 2012-08-03T11:18:31.787 回答
0

您需要防止index.php循环:

RewriteEngine On
# let index.php pass through, thus stopping the rewrite loop
RewriteRule index.php - [L]
# route everything to index.php
RewriteRule ^(.*)$ /index.php?sub=$1 [L]

您也可以先检查现有资源。由于 index.php 存在,这也会打破循环。这样如果您请求静态内容(如 javascript 或 css),它将不会通过 index.php 路由:

RewriteEngine On
# request isn't for an existing file or directory
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# route everything to index.php
RewriteRule ^(.*)$ /index.php?sub=$1 [L]
于 2012-08-03T15:08:48.657 回答