2017-01-06 21 views

回答

1

您可以创建一个.htaccess文件,通过一个PHP文件路由所有请求,然后使用该PHP文件中的逻辑来确定url是否存在。例如,你可以用我的笨.htaccess文件:

RewriteCond $1 !^(index\.php|images|css|fonts|js|robots\.txt|test) 
RewriteRule ^(.*)$ /index.php/$1 [L] 

这让你仍然指定图像,CSS,JS等不得到重新映射,但任何URL不包含那些字符串将启动被路由到index.php。在index.php中,您可以检查查询字符串以确定如何处理url并确定它们是否存在。

// code in index.php, modify to suit 
switch ($_SERVER["PATH_INFO") { // you might also check out REQUEST_URI 
    case "foo": 
    // do blah blah blah 
    break; 
    case "bar": 
    // do other blah blah blah 
    break; 
    default: 
    header("HTTP/1.0 404 Not Found"); 
    echo "Sorry but that page was not found"; 
} 
+1

你的'RewriteRule'传递请求的URL路径为_path information_(即'__SERVER ['PATH_INFO']'),而不是查询字符串。 – DocRoot

+1

@DocRoot DOH!你是对的。正在编辑... –

1

您可以通过编辑.htaccess文件来使用URL重写。如果.htaccess不存在,则可以在项目根目录中创建一个。

RewriteEngine on 
RewriteRule ^/?Some-text-goes-here/([0-9]+)$ /picture.php?id=$1 

上面会转换url.com/picture.php?id=51picture.php/Some-text-goes-here/51

在同样的方式,你可以用你的strtagy。

1

谢谢大家的帮助!

最终的解决方案:RewriteRule ^/?i(/.*)?/company /company [L,NC]

+0

您不需要添加'/?'。 '重写规则^我(/.*)?/公司/公司[L,NC]'。没有这个就没关系。两者都有效。这似乎是多余的。所以,想到给你一个建议。 – Perumal

+0

只有在服务器配置或VirtualHost上下文中使用此规则时,才需要'/?'(斜杠前缀,在此正则表达式中为_optional_)。在每个目录的'.htaccess'文件中,'RewriteRule'模式匹配的URL路径不以斜杠开始,这就是为什么它在这里被选中的原因。 – DocRoot